isNaN 和 Number.isNaN 区别
精准、值的转化
isNaN
isNaN 是 ES5 isNaN 会尝试把值 转化为 Number 类型
- isNaN('hello') true
- isNaN([]) false
- isNaN(undefined) true
- isNaN('4') false
Number.isNaN
Number.isNaN 是 ES6, 优势更加精准 现对比类型
- Number.isNaN(undefined) //false
- Number.isNaN(NaN) //true
- Number.isNaN(null) // false
- const abc = '12' Number.isNaN(abc) === false //
js
isNaN("hello"); // true,因为 "hello" 被尝试转换为数字
Number.isNaN("hello"); // false,"hello" 不是 NaN
isNaN(NaN); // true
Number.isNaN(NaN); // true
isNaN(undefined); // true,undefined 被尝试转换为 NaN
Number.isNaN(undefined); // false
isNaN(null); // false,null 被尝试转换为 0
Number.isNaN(null); // false
isNaN({}); // true,{} 被尝试转换为 NaN
Number.isNaN({}); // false
Number.isNaN polyfill
js
if (!Number.isNaN) {
Number.isNaN = function(value) {
return typeof value === "number" && isNaN(value);
};
}